package br.com.fogas.medicao.business;

import java.sql.SQLException;

import br.com.fogas.database.entidade.Canal;
import br.com.fogas.database.entidade.Cliente;
import br.com.fogas.database.entidade.CondicaoPagto;
import br.com.fogas.medicao.activity.helper.PlanoClientesHelper;
import br.com.fogas.medicao.application.ApplicationFogas;
import br.com.fogas.utils.exception.ParseXmlException;
import br.com.fogas.utils.task.ServiceTask;
import br.com.fogas.utils.task.ServiceTaskBusiness;
import br.com.fogas.webservice.exception.ERaiseWebServiceException;
import br.com.fogas.webservice.exception.RespostaWebServiceException;
import br.com.fogas.webservice.exception.SemConexaoInternetException;
import br.com.fogas.webservice.exception.ServidorForaException;
import br.com.fogas.webservice.exception.TempoEsperaRespostaException;
import br.com.fogas.webservice.exception.WebServiceException;
import br.com.fogas.webservice.parser.cliente.ClienteRequest;
import br.com.fogas.webservice.parser.cliente.ClienteResponse;
import br.com.fogas.webservice.parser.cliente.T_Canal_Setor_Item;
import br.com.fogas.webservice.parser.cliente.T_Cliente_Item;
import br.com.fogas.webservice.parser.cliente.T_Medidor_Item;

public class AtualizarClienteBusiness implements ServiceTaskBusiness {

	private PlanoClientesHelper helper;

	public AtualizarClienteBusiness(PlanoClientesHelper helper) {
		this.helper = helper;
	}
	
	@Override
	public void start(ServiceTask serviceTask) {
		try {
			ClienteRequest request = new ClienteRequest();
			request.setI_vkorg(ApplicationFogas.getInstance().getConfiguracao().getAppDados().getOrgVendas());
			request.setI_kunnr(helper.getPlanoSelecionado().getCliente().getTx_cod_cliente());
			ClienteResponse response = helper.getWebservice().cliente(request).getResponse();
			
			//CANAL
			if(response.getCanal() != null 
					&& response.getCanal().getCanais() != null
					&& !response.getCanal().getCanais().isEmpty()) {
				T_Canal_Setor_Item newCanal = response.getCanal().getCanais().get(0);
				
				Canal canal = helper.getDatabase().getCanal().listarCanalPorCodCliente(newCanal.getTx_cod_cliente());
				if(canal != null) {
					canal.setTx_cod_cliente(newCanal.getTx_cod_cliente());
					canal.setTx_org_vendas(newCanal.getTx_org_vendas());
					canal.setTx_canal(newCanal.getTx_canal());
					canal.setTx_canal_desc(newCanal.getTx_canal_desc());
					canal.setTx_setor(newCanal.getTx_setor());
					canal.setTx_setor_desc(newCanal.getTx_setor_desc());
					canal.setTx_regiao(newCanal.getTx_regiao_vendas());
					canal.setTx_grupo_preco(newCanal.getTx_grupo_preco());
					canal.setTx_grupo_clientes(newCanal.getTx_grupo_clientes());
					helper.getDatabase().getCanal().update(canal);
				}
			}
			
			//CLIENTE
			if(response.getCliente() != null 
					&& response.getCliente().getClientes() != null
					&& !response.getCliente().getClientes().isEmpty()) {
				T_Cliente_Item newCliente = response.getCliente().getClientes().get(0);
				
				Cliente cliente = helper.getDatabase().getCliente().listarClientePorCodigo(newCliente.getTx_cod_cliente());
				if(cliente != null) {
					Canal canal = helper.getDatabase().getCanal().listarCanalPorCodCliente(newCliente.getTx_cod_cliente());
					CondicaoPagto condicao = helper.getDatabase().getCondicaoPagamento()
							.listarCondicaoPorCodigo(newCliente.getTx_cod_cond_pagto());
					
					cliente.setTx_canal(canal);
					cliente.setTx_cod_cond_pagto(condicao);
					cliente.setTx_cod_cliente(newCliente.getTx_cod_cliente());
					cliente.setTx_nome(newCliente.getTx_nome());
					cliente.setTx_cnpj(newCliente.getTx_cnpj());
					cliente.setTx_cpf(newCliente.getTx_cpf());
					cliente.setTx_insc_est(newCliente.getTx_insc_est());
					cliente.setTx_cidade(newCliente.getTx_cidade());
					cliente.setTx_bairro(newCliente.getTx_bairro());
					cliente.setTx_cod_postal(newCliente.getTx_cod_postal());
					cliente.setTx_regiao(newCliente.getTx_regiao());
					cliente.setTx_endereco(newCliente.getTx_endereco());
					cliente.setTx_cod_sit_cred(newCliente.getTx_cod_sit_cred());
					cliente.setTx_sit_cred(newCliente.getTx_sit_cred());
					cliente.setVl_lim_cred(newCliente.getVl_lim_cred());
					cliente.setVl_tot_div(newCliente.getVl_tot_div());
					cliente.setTx_tel(newCliente.getTx_tel());
					cliente.setTx_cel(newCliente.getTx_cel());
					cliente.setCs_bloqueio(newCliente.getCs_bloqueio());
					cliente.setTx_bloqueio(newCliente.getTx_bloqueio());
					cliente.setTx_cod_cid(newCliente.getTx_cod_cid());
					helper.getDatabase().getCliente().update(cliente);
				}
			} 
			
			//MEDIDOR
			if(response.getMedidor() != null 
					&& response.getMedidor().getMedidores() != null
					&& !response.getMedidor().getMedidores().isEmpty()) {
				T_Medidor_Item newMedidor = response.getMedidor().getMedidores().get(0);
				
				
			}
		} catch (SemConexaoInternetException e) {
			e.printStackTrace();
		} catch (ParseXmlException e) {
			e.printStackTrace();
		} catch (TempoEsperaRespostaException e) {
			e.printStackTrace();
		} catch (ServidorForaException e) {
			e.printStackTrace();
		} catch (RespostaWebServiceException e) {
			e.printStackTrace();
		} catch (WebServiceException e) {
			e.printStackTrace();
		} catch (ERaiseWebServiceException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
